﻿using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using ClickLand.CorporacionPlaza.Presentacion.Contratos.AdministracionPoliza;
using ClickLand.CorporacionPlaza.Presentacion.CorporacionPlazaWS;
using ClickLand.CorporacionPlaza.Presentacion.Presentadores.AdministracionPoliza;
using Resources;

namespace AdministracionPoliza
{
    /// <summary> Codebehind de la vista que realiza la consulta de las polizas </summary>
    public partial class ConsultarPolizas : System.Web.UI.Page, IConsultarPolizas
    {
        #region Atributos

        private PresentadorConsultarPolizas _presentador;

        #endregion

        #region Eventos

        /// <summary> Metodo que se ejecuta cuando se inicia la pagina </summary>
        /// <param name="sender">Objeto que generó el evento.</param>
        /// <param name="e">Argumento del evento.</param>
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                _presentador.CargarPagina();
                _presentador.CargarListaConValor(ddlTipoEstablecimiento, "tipoEstablecimiento", false);
                _presentador.CargarListaConValor(ddlEstado, "Estados", false);
            }
            mvConsultarPolizas.SetActiveView(vConsultarVenta);
        }


        /// <summary>Evento de inicializacion de la página.</summary>
        /// <param name="sender">Objeto que generó el evento.</param>
        /// <param name="e">Argumento del evento.</param>
        protected void Page_Init(object sender, EventArgs e)
        {
            _presentador = new PresentadorConsultarPolizas(this);
        }


        /// <summary> Metodo que se ejecuta cuando se da click al boton de buscar poliza </summary>
        /// <param name="sender">Objeto que generó el evento.</param>
        /// <param name="e">Argumento del evento.</param>
        protected void BtnBuscarPolizasCLick(object sender, EventArgs e)
        {
            _presentador.BuscarPoliza();
            mvConsultarPolizas.SetActiveView(vListaVentas);
            ConfigurarControles();
        }


        /// <summary> Metodo que se ejecuta cuando se da click al boton siguiente en la paginacion de la lista de ventas </summary>
        /// <param name="sender">Objeto que generó el evento.</param>
        /// <param name="e">Argumento del evento.</param>
        protected void BtnAnteriorPaginacionOnClick(object sender, EventArgs e)
        {
            if (gvListaPolizas.PageIndex > 0)
                gvListaPolizas.PageIndex--;
            gvListaPolizas.DataSource = ListaPolizas;
            gvListaPolizas.DataBind();

            ConfigurarControles();
        }


        /// <summary> Metodo que se ejecuta cuando se da click al boton siguiente en la paginacion de la lista de ventas </summary>
        /// <param name="sender">Objeto que generó el evento.</param>
        /// <param name="e">Argumento del evento.</param>
        protected void BtnSiguientePaginacionOnClick(object sender, EventArgs e)
        {

            if (gvListaPolizas.PageIndex < gvListaPolizas.PageCount)
                gvListaPolizas.PageIndex++;

            gvListaPolizas.DataSource = ListaPolizas;
            gvListaPolizas.DataBind();
            ConfigurarControles();
        }


        /// <summary> Metodo que se ejecuta cuando se da click al boton regresar en la vista de la lista deventas </summary>
        /// <param name="sender">Objeto que generó el evento.</param>
        /// <param name="e">Argumento del evento.</param>
        protected void BtnRegresarListaCLick(object sender, EventArgs e)
        {
            mvConsultarPolizas.SetActiveView(vConsultarVenta);
        }


        /// <summary> Metodo que se ejecuta cuando se da click al boton de imprimir </summary>
        /// <param name="sender">Objeto que generó el evento.</param>
        /// <param name="e">Argumento del evento.</param>
        protected void BtnImprimirCLick(object sender, EventArgs e)
        {
            Response.ClearContent();
            Response.ClearHeaders();
            Response.ContentType = "application/pdf";
            Response.AddHeader("Content-Disposition", "attachment; filename=" + "ReporteConsultaPolizas.pdf");
            Response.TransmitFile(ConfigurationManager.AppSettings["RutaDescarga"] + "ReporteConsultaPolizas.pdf");
            Response.End();
            Response.Flush();
            Response.Clear();
        }


        /// <summary> Metodo que se ejecuta cuando se da click al boton de generar PDF </summary>
        /// <param name="sender">Objeto que generó el evento.</param>
        /// <param name="e">Argumento del evento.</param>
        protected void BtnGenerarPdfClick(object sender, EventArgs e)
        {
            _presentador.ImprimirReporte();
            myPDF.Attributes["src"] = ConfigurationManager.AppSettings["RutaDescargaOnLine"] + "ReporteConsultaPolizas.pdf";
            mvConsultarPolizas.SetActiveView(vReporte);
        }


        /// <summary> Metodo que ejecuta la acccion del boton regresar de la vista de visualizacion de reporte </summary>
        /// <param name="sender">Objeto que generó el evento.</param>
        /// <param name="e">Argumento del evento.</param>
        protected void BtnRegresarReporte(object sender, EventArgs e)
        {
            mvConsultarPolizas.SetActiveView(vListaVentas);
        }
        #endregion

        #region Propiedades

        /// <summary> Propiedad que obtiene el tipo de establecimiento para consulta </summary>
        public int TipoEstablecimiento
        {
            get { return Convert.ToInt32(ddlTipoEstablecimiento.SelectedValue); }
        }

        
        /// <summary> Propiedad que setea la lista de contratos activos pertenecientes a la feria</summary>
        public List<ContratoDto> ListaContratos
        {
            get { return (List<ContratoDto>)Session["ListaContratos"]; }
            set
            {
                Session["ListaContratos"] = value;
                ddlContratos.DataSource = value;
                ddlContratos.DataTextField = "RazonSocial";
                ddlContratos.DataValueField = "Id";
                ddlContratos.DataBind();
            }
        }

        /// <summary> Propiedad que obtiene el contrato seleccionado </summary>
        public ContratoDto ContratoSeleccionado
        {
            get
            {
                var lista = (List<ContratoDto>)Session["ListaContratos"];
                return (ddlContratos.SelectedIndex == 0) ? null : lista[ddlContratos.SelectedIndex - 1];
            }
        }


        /// <summary> Estado seleccioado </summary>
        public int Estado
        {
            get { return Convert.ToInt32(ddlEstado.SelectedValue); }
        }

        public string TituloReporte
        {
            get { return Etiquetas.TituloReportePoliza; }
        }


        /// <summary> Propiedad que obtiene o setea el valor de la lista de las ventas que cumple con la consutla </summary>
        public List<PolizaDto> ListaPolizas
        {
            get { return (List<PolizaDto>)Session["ListaPolizas"]; }
            set
            {
                Session["ListaPolizas"] = value;
                gvListaPolizas.DataSource = value;
                gvListaPolizas.DataBind();
            }
        }

        #endregion

        #region Metodos

        /// <summary> Metodo que realiza las operaciones para configurar la visibilidad de los botones
        /// y el texto de información </summary>
        private void ConfigurarControles()
        {
            lblInfoPaginado.Visible = gvListaPolizas.PageCount >= 1;
            lblInfoPaginado.Text = string.Format("Página {0}/{1} - Total Registros {2}",
                                                 gvListaPolizas.PageIndex + 1, gvListaPolizas.PageCount,
                                                 ((List<PolizaDto>)gvListaPolizas.DataSource).Count);
            btnAnteriorPag.Visible = (gvListaPolizas.PageIndex > 0);
            btnSiguientePag.Visible = (gvListaPolizas.PageIndex < gvListaPolizas.PageCount - 1) &&
                                      (gvListaPolizas.PageCount > 1);
            lblSinCliente.Visible = gvListaPolizas.Rows.Count == 0;
        }

        #endregion

    }
}